#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *reverse_word(const char *str)
{
    int len = strlen(str);
    char *str1 = (char*)malloc(len + 1);//动态分配一块内存，大小为输入字符串的长度加1（用于存储字符串的空字符 \0）。
    strcpy(str1, str);

    for (int i = 0, j = len - 1; i < j; i++, j--)//将整个字符串反转。
    {
        char temp = str1[i];
        str1[i] = str1[j];
        str1[j] = temp;
    }
//反转每个单词
    int k = 0;//单词的开始
    while (k < len) //找到单词的起始和结束位置：
    {
        int i = k;
        while (str1[i] != ' ' && str1[i] != '\0')
        {
            i++;
        }
        int j = i - 1;//单词的末尾

        while (k < j)//反转单词内的字符
        {
            char temp = str1[k];
            str1[k] = str1[j];
            str1[j] = temp;
            k++;
            j--;
        }

        k = i + 1; //跳过空格：将 k 移动到下一个单词的起始位置（i + 1）。
  
    }
    return str1;
}
int main(int argc, char const *argv[])
{
    /* 反转一个字符串中的每一个单词 */
    const char* str = "hello ni hao world";
    char *str1 = reverse_word(str);

    printf("转换前：%s \n",str);
    printf("转换后：%s \n",str1);
    free(str1);//释放内存
    return 0;
}
